# -*- coding: utf-8 -*-
#
# author: Tobiasz Siemiński
# creation date: 11.05.2011

import random
import copy

def generateTeams(playersDict):

	starySlownik = {}
	starySlownik.update(playersDict)


	team = {}
	roznica = countSum(playersDict.values()) #wartosc poczatkowa ustawiana na duza wartosc, bo idealna jest jak najmniejsza i zostaje pozniej podmieniona
	proby = 0 #ilosc prob losowan dla danego interwalu, po 30 probach, interwal zostaje zwiekszony o 1
	interwal = 3 #poczatkowa wartosc maksymalnej roznicy w sumie umiejetnosci miedzy druzynami
	maxPlayersInTeam = len(playersDict.keys())/2 #maksymalna ilosc zawodnikow w druzynie = polowie wszystkich zawodnikow do wylosowania

	while len(playersDict.keys()) > 0:
		player = random.choice(playersDict.values())

		team[player.nick] = player
		del playersDict[player.nick]

		roznica = abs(countSum(team.values()) - countSum(playersDict.values()))

		if roznica < interwal and abs(len(team.keys())-len(playersDict.keys())) < 2:
			return team, playersDict
		# jesli juz liczba zawodnikow w druzynie przekroczy polowe wszystkich to resetuj druzyne i slownik do losowania
		elif len(team.keys()) > maxPlayersInTeam:		
			team = {}
			playersDict.update(starySlownik)
			proby +=1
			# zwieksz interwal jesli dla 30 prob niemozliwe bylo stworzenie dobrej druzyny
			if proby > 40:
				proby = 0
				interwal += 1

def countSum(team):
	suma = 0	
	for player in team:
		suma += player.physicalFitness+player.composure+player.engagement+player.technique
	return suma

























